# -*- coding: utf-8 -*-
"""
乒乓球培训管理系统 - 配置文件
开发环境配置，统一管理数据库连接、密钥、时区等配置项
"""

import os
import pytz
from datetime import timedelta


class Config:
    """
    应用配置类
    包含乒乓球培训管理系统的所有配置项
    """
    # 应用基础配置
    SECRET_KEY = 'pingpong-training-system-secret-key-2025'
    DEBUG = True

    # 数据库配置
    MYSQL_HOST = 'localhost'
    MYSQL_PORT = 3306
    MYSQL_USER = 'root'
    MYSQL_PASSWORD = 'ljd+++789'
    MYSQL_DATABASE = 'pingpong_training'

    SQLALCHEMY_DATABASE_URI = (
        f'mysql+pymysql://{MYSQL_USER}:{MYSQL_PASSWORD}@'
        f'{MYSQL_HOST}:{MYSQL_PORT}/{MYSQL_DATABASE}'
    )
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    SQLALCHEMY_ENGINE_OPTIONS = {
        'pool_pre_ping': True,
        'pool_recycle': 300,
        'connect_args': {
            'charset': 'utf8mb4',
            'use_unicode': True
        }
    }

    # 时区配置 - 统一使用中国标准时间(UTC+8)
    TIMEZONE = pytz.timezone('Asia/Shanghai')

    # 营业时间配置
    DEFAULT_OPEN_TIME = '07:00:00'
    DEFAULT_CLOSE_TIME = '22:00:00'

    # 预约配置
    RESERVATION_TIME_SLOT = 30  # 预约时间粒度（分钟）
    MAX_ADVANCE_DAYS = 7  # 最多提前预约天数
    CANCEL_HOURS_LIMIT = 24  # 取消预约时间限制（小时）
    MAX_MONTHLY_CANCELS = 3  # 每月最大取消次数

    # 师生关系配置
    MAX_COACHES_PER_STUDENT = 2  # 学员最多选择教练数
    MAX_STUDENTS_PER_COACH = 20  # 教练最多指导学员数

    # 教练收费标准（分为单位，避免浮点数精度问题）
    COACH_RATES = {
        'senior': 20000,   # 高级教练 200元/小时
        'middle': 15000,   # 中级教练 150元/小时
        'junior': 8000     # 初级教练 80元/小时
    }

    # Flask-WTF配置
    WTF_CSRF_ENABLED = False  # 临时禁用CSRF保护
    WTF_CSRF_TIME_LIMIT = 3600  # CSRF令牌有效期1小时
    WTF_CSRF_SECRET_KEY = SECRET_KEY  # 使用相同的密钥

    # Flask-Login配置
    REMEMBER_COOKIE_DURATION = timedelta(days=7)  # 记住我功能7天有效
    SESSION_PROTECTION = 'strong'

    # 分页配置
    ITEMS_PER_PAGE = 10  # 每页显示条目数

    # 文件上传配置
    UPLOAD_FOLDER = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'static', 'uploads')
    MAX_CONTENT_LENGTH = 16 * 1024 * 1024  # 最大上传文件大小16MB
    ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif', 'pdf', 'doc', 'docx'}

    # 头像配置
    AVATAR_FOLDER = os.path.join(UPLOAD_FOLDER, 'avatars')
    AVATAR_SIZE = (200, 200)  # 头像尺寸


